package practice6;

import java.util.Arrays;
import java.util.Scanner;

public class Ac858 {
    static int n,m;
    static int INF=(int)1e9;
    static int[][] g=new int[1010][1010];		//邻接矩阵
    static int[] dist=new int[1010];			//表示各节点到集合的距离
    static boolean[] st=new boolean[1010];		//表示该节点是否在集合中

    public static int prim(){
        Arrays.fill(dist,INF);		//第一步,很关键别忘了
        int res=0;
        for(int i=0;i<n;i++){		//依次将n个节点加入到集合中
            int t=-1;
            //1.找出离集合最近的点
            for(int j=1;j<=n;j++){
                if(!st[j] && (t==-1 || dist[j]<dist[t])){
                    t=j;
                }
            }
            if(i>0 && dist[t]==INF){
                return INF;			//图不连通
            }
            if(i>0){
                res+=dist[t];
            }
            st[t]=true;			//把当前节点加入到集合中
            //2.更新各个点到集合的距离
            for(int j=1;j<=n;j++){
                dist[j]=Math.min(dist[j],g[t][j]);
            }
        }
        return res;
    }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        m=sc.nextInt();
        for(int i=0;i<g.length;i++){
            Arrays.fill(g[i],INF);
        }
        for(int i=0;i<m;i++){
            int u=sc.nextInt();
            int v=sc.nextInt();
            int w=sc.nextInt();
            g[u][v]=w;
            g[v][u]=w;
        }
        int ans = prim();
        System.out.println(ans);
    }
}
